#include <bits/stdc++.h>
using namespace std;
const long long N=1e5+10;
long long n,m;
long long cnt[N];
long long ret=0;
map<long long,long long> d;
long long mx=-1;


struct node{
    long long powr,lft,fgh;
    bool operator<(node a)const{
        return powr<a.powr;
    }
};
set<node> s;
int main(){
    freopen("duel.in","r",stdin);
    freopen("duel.out","w",stdout);
    cin>>n;
    for(long long i=1;i<=n;i++){
        long long a;
        cin>>a;
        cnt[a]++;
        d[a]++;
        mx=max(mx,a);
    }
    for(pair<long long,long long> p:d){
        s.insert(node{p.first,p.second,p.second});
        ret++;
        //cout<<p.first<<' '<<p.second<<'\n';
    }
    if(ret==1){
        cout<<n;
        return 0;
    }
    long long ans=n;
    while(1){
        //cout<<s.size()<<'\n';
        node p=*s.begin();
        s.erase(s.begin());
        node q;
        for(auto i:s){
            if(i.fgh!=0){
                q=i;
                break;
            }
        }
        long long numa=p.lft;
        long long numb=q.fgh;
        if(numa>numb){
            ans-=numb;
            numa-=numb;
            numb=0;
            s.insert(node{p.powr,numa,p.fgh});
            s.insert(node{q.powr,q.lft,0});
        }else if(numa==numb){
            ans-=numa;
            numb=0;
            s.insert(node{q.powr,q.lft,0});
        }else{
            ans-=numa;
            numb-=numa;
            s.insert(node{q.powr,q.lft,numb});
        }
        if(q.powr==mx) break;
    }
    cout<<ans;
    return 0;
}